package v1

import org.lwjgl.opengl.GL11C.*

class Renderer {
    private val renderLst = ArrayList<RenderItem>()
    lateinit var app: GameApp
    fun init(gameApp: GameApp) {
        app = gameApp
        glClearColor(0f, 0f, 0f, 1f)
        glEnable(GL_DEPTH_TEST)

    }

    fun render(scene: Scene, camera: Camera) {
        glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT)
        camera.updateProjMatrix(app.window.aspect)
        camera.updateViewMatrix()

        scene.updateMatrix()
        // TODO:
        // 1. 场景物体剔除

        // 遍历, 对 scene 进行渲染
        // TODO:
        //  1.渲染不透明的物体
        //  2.对透明的物体进行排序
        //  3.渲染透明的物体

        // 得到一个渲染列表,
        renderLst.clear()
        scene.addToRenderLst(renderLst)
        renderLst.forEach { item ->
            item.render(camera.projMatrix, camera.viewMatrix)
        }
    }

    fun cleanup() {
    }
}